package org.example.service;

import dto.ExceptionTrackingQueryDTO;
import dto.InspectionQualityQueryDTO;
import dto.StandardQuaryDTO;
import entity.ExceptionTracking;
import entity.MaterialOrder;
import entity.QualityInspection;
import jakarta.servlet.http.HttpServletResponse;
import org.example.result.PageResult;
import org.example.result.Result;

import java.util.List;
import java.util.Map;

/**
 * 质量经理服务接口
 */
public interface QualityManagerService {

    /**
     * 查询质检单
     * @param queryDTO 查询参数
     * @return 分页结果
     */
    PageResult queryQualityInspection(InspectionQualityQueryDTO queryDTO);

    /**
     * 审核质检单
     * @param qualityInspection 质检单信息
     */
    void reviewQualityInspection(QualityInspection qualityInspection);

    /**
     * 查询质量标准
     * @param queryDTO 查询参数
     * @return 分页结果
     */
    PageResult queryQualityStandard(StandardQuaryDTO queryDTO);

    /**
     * 获取质量数据看板
     * @param dateRange 日期范围
     * @param inspectionType 检验类型
     * @param supplier 供应商
     * @param defectType 缺陷类型
     * @return 质量数据看板
     */
    Map<String, Object> getQualityDashboard(List<String> dateRange, String inspectionType, String supplier, String defectType);

    /*
    * 查询异常列表
    * */
    PageResult getExceptionList(ExceptionTrackingQueryDTO queryDTO);

//    追踪异常
    List<MaterialOrder> getTracking(String exceptionNumber);

    /*
    * 查询异常信息
    * */
    ExceptionTracking getExceptionDetail(String exceptionNumber);

    void updateExceptionTracking(ExceptionTracking exceptionTracking);

    void addExceptionTracking(ExceptionTracking exceptionTracking);

    Map<String, Object> getLineChatException();
    /**
     * 导出质检单
     * @param inspectionIds 质检单ID列表
     * @param response 响应对象
     */
    void exportInspection(List<Integer> inspectionIds, HttpServletResponse response);

    /**
     * 列出不合格质检列表
     */
    List<Integer> listUnqualifiedInspection();

    /**
     * 获取异常跟踪时间线
     * @param exceptionNumber 异常编号
     * @return 时间线数据
     */
    List<Map<String, Object>> getTrackingTimeline(String exceptionNumber);
}